/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
 */

package dao

import (
	"fmt"
	"prim-server/model"

	"github.com/pkg/errors"
)

type CloudUserDao struct {
	BaseDao
}

type ICloudUserDao interface {
	SaveCloudUserInfo(cloudUser *model.CloudUser) error
	GetCloudUserInfo(userId []string) ([]*model.CloudUser, error)
	UpdateCloudUserInfo(cloudUser *model.CloudUser) error
	DeleteCloudUserInfo(userId string) error
}

func GetCloudUserDao() ICloudUserDao {
	dao := &CloudUserDao{}
	dao.Init()
	return dao
}

func (cud *CloudUserDao) SaveCloudUserInfo(cloudUser *model.CloudUser) error {
	if cloudUser == nil {
		return nil
	}
	_, err := cud.O.Insert(cloudUser)
	if err != nil {
		return errors.Errorf("SaveCloudUserInfo error: %v, userId: %s", err, cloudUser.UserId)
	}
	return nil
}

func (cud *CloudUserDao) GetCloudUserInfo(userId []string) (cloudUsers []*model.CloudUser, err error) {
	if len(userId) > 0 {
		_, err = cud.O.QueryTable(&model.CloudUser{}).Filter("user_id__in", userId).All(&cloudUsers)
	} else {
		_, err = cud.O.QueryTable(&model.CloudUser{}).All(&cloudUsers)
	}
	if err != nil {
		return nil, errors.Errorf("GetCloudUserInfo error: %v, userId: %s", err, fmt.Sprint(userId))
	}
	return cloudUsers, nil
}
func (cud *CloudUserDao) UpdateCloudUserInfo(cloudUser *model.CloudUser) error {
	if cloudUser == nil {
		return nil
	}
	_, err := cud.O.Update(cloudUser)
	if err != nil {
		return errors.Errorf("UpdateCloudUserInfo error: %v, userId: %s", err, cloudUser.UserId)
	}
	return nil
}
func (cud *CloudUserDao) DeleteCloudUserInfo(userId string) error {
	if len(userId) == 0 {
		return nil
	}
	cloudUser := new(model.CloudUser)
	cloudUser.UserId = userId
	_, err := cud.O.Delete(cloudUser, "user_id")
	if err != nil {
		return errors.Errorf("DeleteCloudUserInfo error: %v, userId: %s", err, userId)
	}
	return nil
}
